package DAO;

import factory.Conexao;
import java.io.Serializable;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import model.TipoIntegracao;
import model.TipoSistema;

public class TipoIntegracaoDAO implements Serializable {
    
    private TipoIntegracaoDAO()
    {
        
    }
    
    public static boolean insert(TipoIntegracao tipoIntegracao) {
        String sql;
        sql  = "INSERT INTO TIPOINTEGRACAO (TIPOINTEGRACAO, ";
        sql += "                            DESCRICAOTIPOINTEGRACAO,";
        sql += "                            SISTEMARESPONSAVEL,";
        sql += "                            PROCESSANDOINTEGRACAO,";
        sql += "                            INICIOULTIMAINTEGRACAO,";
        sql += "                            FIMULTIMAINTEGRACAO,";
        sql += "                            SISTEMADESTINO,";
        sql += "                            ATIVO,";
        sql += "                            TIPOSISTEMAORIGEM,";
        sql += "                            TIPOSISTEMADESTINO)";
        sql += "                    VALUES (?,";
        sql += "                            ?,";
        sql += "                            ?,";
        sql += "                            ?,";
        sql += "                            ?,";
        sql += "                            ?,";
        sql += "                            ?,";
        sql += "                            ?,";
        sql += "                            ?,";
        sql += "                            ?)";

        Connection conn;
        PreparedStatement stm;
        try {
            conn = Conexao.getConnection();
            stm = conn.prepareStatement(sql);
            stm.setInt(1, tipoIntegracao.getTipoIntegracao());
            stm.setString(2, tipoIntegracao.getDescricaoTipoIntegracao());
            stm.setString(3, tipoIntegracao.getSistemaResponsavel());
            stm.setBoolean(4, tipoIntegracao.isProcessandoIntegracao());
            stm.setDate(5, tipoIntegracao.getInicioUltimaIntegracao());
            stm.setDate(6, tipoIntegracao.getFimUltimaIntegracao());
            stm.setString(7, tipoIntegracao.getSistemaDestino());
            stm.setBoolean(8, tipoIntegracao.isAtivo());
            stm.setInt(9, tipoIntegracao.getTipoSistemaOrigem().getTipoSistema());
            stm.setInt(10, tipoIntegracao.getTipoSistemaDestino().getTipoSistema());

            stm.execute();
            stm.close();
            conn.close();
            return true;
        } catch (SQLException ex) {
            return false;
        }
    }

    public static boolean update(TipoIntegracao tipoIntegracao) {
        String sql;
        sql  = "UPDATE TIPOINTEGRACAO";
        sql += "   SET DESCRICAOTIPOINTEGRACAO = ?, ";
        sql += "       SISTEMARESPONSAVEL = ?, ";
        sql += "       PROCESSANDOINTEGRACAO = ?, ";
        sql += "       INICIOULTIMAINTEGRACAO = ?, ";
        sql += "       FIMULTIMAINTEGRACAO = ?, ";
        sql += "       SISTEMADESTINO = ?, ";
        sql += "       ATIVO = ?, ";
        sql += "       TIPOSISTEMAORIGEM = ?, ";
        sql += "       TIPOSISTEMADESTINO = ? ";
        sql += " WHERE TIPOINTEGRACAO = ?";

        Connection conn;
        PreparedStatement stm;
        try {
            conn = Conexao.getConnection();
            stm = conn.prepareStatement(sql);
            stm.setString(1, tipoIntegracao.getDescricaoTipoIntegracao());
            stm.setString(2, tipoIntegracao.getSistemaResponsavel());
            stm.setBoolean(3, tipoIntegracao.isProcessandoIntegracao());
            stm.setDate(4, tipoIntegracao.getInicioUltimaIntegracao());
            stm.setDate(5, tipoIntegracao.getFimUltimaIntegracao());
            stm.setString(6, tipoIntegracao.getSistemaDestino());
            stm.setBoolean(7, tipoIntegracao.isAtivo());
            stm.setInt(8, tipoIntegracao.getTipoSistemaOrigem().getTipoSistema());
            stm.setInt(9, tipoIntegracao.getTipoSistemaDestino().getTipoSistema());
            stm.setInt(10, tipoIntegracao.getTipoIntegracao());

            stm.execute();
            stm.close();
            conn.close();
            return true;
        } catch (SQLException ex) {
            return false;
        }
    }

    public static boolean delete(TipoIntegracao tipoIntegracao) {
        String sql;
        sql  = "DELETE";
        sql += "  FROM TIPOINTEGRACAO";
        sql += " WHERE TIPOINTEGRACAO = ?";

        Connection conn;
        PreparedStatement stm;
        try {
            conn = Conexao.getConnection();
            stm = conn.prepareStatement(sql);
            stm.setInt(1, tipoIntegracao.getTipoIntegracao());
            stm.execute();
            stm.close();
            conn.close();
            return true;
        } catch (SQLException ex) {
            return false;
        }
    }

    public static ArrayList<TipoIntegracao> select() {
        String sql;
        sql  = "SELECT TIP.TIPOINTEGRACAO,";
        sql += "       TIP.DESCRICAOTIPOINTEGRACAO,";
        sql += "       TIP.SISTEMARESPONSAVEL,";
        sql += "       TIP.PROCESSANDOINTEGRACAO,";
        sql += "       TIP.INICIOULTIMAINTEGRACAO,";
        sql += "       TIP.FIMULTIMAINTEGRACAO,";
        sql += "       TIP.SISTEMADESTINO,";
        sql += "       TIP.ATIVO,";
        sql += "       TIP.TIPOSISTEMAORIGEM,";
        sql += "       TSO.NOMETIPOSISTEMA AS NOMETIPOSISTEMAORIGEM,";
        sql += "       TIP.TIPOSISTEMADESTINO,";
        sql += "       TSD.NOMETIPOSISTEMA AS NOMETIPOSISTEMADESTINO";
        sql += "  FROM TIPOINTEGRACAO TIP,";
        sql += "       TIPOSISTEMA TSO,";
        sql += "       TIPOSISTEMA TSD";
        sql += " WHERE TIP.TIPOSISTEMAORIGEM = TSO.TIPOSISTEMA";
        sql += "   AND TIP.TIPOSISTEMADESTINO = TSD.TIPOSISTEMA";

        Connection conn;
        PreparedStatement stm;
        ResultSet rs;
        TipoIntegracao tipoIntegracao;
        TipoSistema tipoSistema;
        ArrayList<TipoIntegracao> listTipoIntegracao = new ArrayList<TipoIntegracao>();
        try {
            conn = Conexao.getConnection();
            stm = conn.prepareStatement(sql);
            rs = stm.executeQuery();
            while (rs.next()) {
                tipoIntegracao = new TipoIntegracao();
                
                tipoSistema = new TipoSistema();
                tipoSistema.setTipoSistema(rs.getInt("TIPOSISTEMAORIGEM"));
                tipoSistema.setNomeTipoSistema(rs.getString("NOMETIPOSISTEMAORIGEM"));
                tipoIntegracao.setTipoSistemaOrigem(tipoSistema);
                
                tipoSistema = new TipoSistema();
                tipoSistema.setTipoSistema(rs.getInt("TIPOSISTEMADESTINO"));
                tipoSistema.setNomeTipoSistema(rs.getString("NOMETIPOSISTEMADESTINO"));
                tipoIntegracao.setTipoSistemaDestino(tipoSistema);
                
                tipoIntegracao.setTipoIntegracao(rs.getInt("TIPOINTEGRACAO"));
                tipoIntegracao.setDescricaoTipoIntegracao(rs.getString("DESCRICAOTIPOINTEGRACAO"));
                tipoIntegracao.setSistemaResponsavel(rs.getString("SISTEMARESPONSAVEL"));
                tipoIntegracao.setProcessandoIntegracao(rs.getInt("PROCESSANDOINTEGRACAO") == 1);
                tipoIntegracao.setInicioUltimaIntegracao(rs.getDate("INICIOULTIMAINTEGRACAO"));
                tipoIntegracao.setFimUltimaIntegracao(rs.getDate("FIMULTIMAINTEGRACAO"));
                tipoIntegracao.setSistemaDestino(rs.getString("SISTEMADESTINO"));
                tipoIntegracao.setAtivo(rs.getInt("ATIVO") == 1);
                
                listTipoIntegracao.add(tipoIntegracao);
            }
            stm.close();
            conn.close();
            return listTipoIntegracao;
        } catch (SQLException ex) {
            return null;
        }
    }
}
